package com.yunkeji.system.service;

import com.yunkeji.common.core.domain.PageQuery;
import com.yunkeji.common.core.page.TableDataInfo;
import com.yunkeji.dao.domain.AppUser;
import com.yunkeji.dao.domain.AppUserVip;
import com.yunkeji.dao.domain.PhoneLog;
import com.yunkeji.dao.vo.AppUserVo;
import com.yunkeji.dao.vo.PayWalletLogVo;
import com.yunkeji.dao.vo.PhoneLogVo;
import com.yunkeji.dao.vo.broker.IndexVo;
import com.yunkeji.system.domain.bo.*;

import java.util.Collection;
import java.util.List;

/**
 * 用户基本信息-扩展(存放一些不重要但是必要的信息)Service接口
 *
 * @author zhang
 * @date 2024-07-10
 */
public interface IAppUserService {

    /** 查询用户基本信息-扩展(存放一些不重要但是必要的信息) */
    AppUserVo queryById(Long id);

    /** 查询用户基本信息-扩展(存放一些不重要但是必要的信息)列表 */
    TableDataInfo<AppUserVo> queryPageList(AppUserBo bo, PageQuery pageQuery);

    /** 查询用户基本信息-扩展(存放一些不重要但是必要的信息)列表 */
    List<AppUserVo> queryList(AppUserBo bo);

    /** 新增用户基本信息-扩展(存放一些不重要但是必要的信息) */
    Boolean insertByBo(AppUserBo bo);

    /** 修改用户基本信息-扩展(存放一些不重要但是必要的信息) */
    Boolean updateByBo(AppUserBo bo);

    /** 校验并批量删除用户基本信息-扩展(存放一些不重要但是必要的信息)信息 */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 踢下线
     *
     * @param id
     */
    void kickOnline(Long id);

    void kickOnline(Long id, String reason);


    /**
     * 封号
     *
     * @param userBannedBo
     */
    void bannedAccount(UserBannedBo userBannedBo);

    /**
     * 解封
     *
     * @param uid
     */
    void releaseAccount(Long uid);

    /**
     * 设置账号类型
     *
     * @param setAccountTypeBo
     */
    void setAccountType(SetAccountTypeBo setAccountTypeBo);

    /**
     * 取消绑定
     *
     * @param uid
     */
    void unBindUser(ToBindAccountBo toBindAccountBo);

    /**
     * 绑定用户
     *
     * @param uid
     */
    void bindUser(ToBindAccountBo toBindAccountBo);

    /**
     * 去排序
     *
     * @param uid
     */
    void toSort(ToSortBo toSortBo);

    /**
     * 增加VIP
     *
     * @param addVipBo
     */
    void addVip(AddVipBo addVipBo);

    /**
     * 增加钱包余额
     *
     * @param addWalletBo
     */
    void addWallet(AddWalletBo addWalletBo);

    /**
     * 查询用户钱包修改记录
     *
     * @param userId
     */
    TableDataInfo<PayWalletLogVo> queryPayWalletLog(Long userId, PageQuery query);

    /**
     * 查询会员信息
     *
     * @param id
     * @return
     */
    AppUserVip getVipInfo(Long id);

    /**
     * 修改用户手机号码
     *
     * @param log
     * @return
     */
    void changePhone(PhoneLog log);

    /**
     * 查询用户手机号码修改记录
     *
     */
    TableDataInfo<PhoneLogVo> getPhoneLog(PhoneLog log, PageQuery query);

    /**
     * 查询注册用户统计
     *
     */
    TableDataInfo<IndexVo> queryRegisterCount(MonthStatisticsBo bo, PageQuery query);
}
